//
//  OAuthViewController.swift
//  Weibo
//
//  Created by 张婷 on 15/10/17.
//  Copyright © 2015年 itheima. All rights reserved.
//

import UIKit
import SVProgressHUD
/// 用户登录控制器
class OAuthViewController: UIViewController {
    
    private lazy var webView = UIWebView()
    /// 关闭
    @objc private func close() {
        // modal 出来的控制器
        //navigationController?.popoverPresentationController
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    /// 自动填充
    @objc private func autoFill() {
        
        let js = "document.getElementById('userId').value = '15243614858';" +
        "document.getElementById('passwd').value = 'tt19911211';"
        
        // 让 webView 执行 js
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
    
    ///  生命周期函数
    override func loadView() {
        super.loadView()
        
        // 设置根部视图
        view = webView
        
        // 设置代理
        webView.delegate = self
        
        title = "自动登录页面"
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "autoFill")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // 加载页面
        self.webView.loadRequest(NSURLRequest(URL: NetworkTools.sharedTools.authURL))
    }
}

// MARK: - UIWebViewDelegate
extension OAuthViewController: UIWebViewDelegate {
    
    ///  将要加载请求的代理方法
    ///
    ///  - parameter webView:        webView
    ///  - parameter request:        将要加载的请求
    ///  - parameter navigationType: 加载请求的跳转方式
    ///
    ///  - returns: 返回 false 不加载 返回 true 继续加载
    ///  在加载授权的过程中，这个方法会调用3次，而 code 是在 主机地址是百度的那个 request 里面
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 判断主机地址是不是百度，如果不是百度就继续加载，是百度就不夹杂
        guard let url = request.URL where url.host == "www.baidu.com" else {
            return true
        }
        
        // 判断 url.query 中是否有 “code = ”，如果用户没有授权，则没有 code =
        guard let query = url.query where query.hasPrefix("code=") else {
            
            // 取消授权的时候关闭控制器
            self.close()
            print("取消授权")
            return false
        }
        
        // 取出授权码
        let code = query.substringFromIndex("code=".endIndex)
        
        // 加载 token 和用户信息
        UserAccountViewModel.sharedUserAccountModel.loadAccessToken(code) { (isSuccessed) -> () in
            
            if isSuccessed {
                SVProgressHUD.showInfoWithStatus("登录成功")
                // 通知更换控制器
                self.dismissViewControllerAnimated(false) {
                    
                    // 通知中心是同步的 - 一旦发送通知，会先执行监听方法，直接结束后，才执行后续代码
                    NSNotificationCenter.defaultCenter().postNotificationName(WBSwitchRootviewControllerNotification, object: "welcome")
                }
                
            }else {
                
                print("加载 token 失败")
                SVProgressHUD.showInfoWithStatus("登录失败")
                // 延迟关闭控制器  定义在 Comman.swift 文件中
                delay(0.5, callFunc: { () -> () in
                    self.close()
                })
            }
        }
        return false
    }
    
    
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    
}